﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.grad
    共轭梯度法
    参数 a: a[n][n]存放对称正定矩阵。
    参数 n: 方程组阶数。
    参数 b: b[n]存放方程组右端常数向量。
    参数 eps:  控制精度要求。
    参数 x: x[n]返回方程组解向量。
    */

    public static string drive_grad()
    {
        double eps;
        double[] x = new double[4];
        double[,] a = new double[4, 4]{
            {5.0,7.0,6.0,5.0},
            {7.0,10.0,8.0,7.0},
            {6.0,8.0,10.0,9.0},
            {5.0,7.0,9.0,10.0}
        };
        double[] b = new double[4] {
            23.0, 32.0, 33.0, 31.0
        };
        eps = 0.000001;

        string rs = "";
        rs += gl.html_table("Mat A:", a);
        rs += gl.html_table("Mat B:", b);
        gl.grad(a, 4, b, eps, x);

        return gl.html_table("Mat X:", x);
    }
}